package com.gs.dbex.design;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Rectangle2D;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class ResizeRectangle extends JPanel {
	private int SIZE = 8;
	private Rectangle2D[] points = {
			new Rectangle2D.Double(50, 50, SIZE, SIZE),
			new Rectangle2D.Double(150, 100, SIZE, SIZE) };
	Rectangle2D s = new Rectangle2D.Double();

	ShapeResizeHandler ada = new ShapeResizeHandler();

	public ResizeRectangle() {
		addMouseListener(ada);
		addMouseMotionListener(ada);
	}

	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		Graphics2D g2 = (Graphics2D) g;

		for (int i = 0; i < points.length; i++) {
			g2.fill(points[i]);
		}
		s.setRect(points[0].getCenterX(), points[0].getCenterY(),
				Math.abs(points[1].getCenterX() - points[0].getCenterX()),
				Math.abs(points[1].getCenterY() - points[0].getCenterY()));

		g2.draw(s);
	}

	class ShapeResizeHandler extends MouseAdapter {
		Rectangle2D r = new Rectangle2D.Double(0, 0, SIZE, SIZE);
		private int pos = -1;

		public void mousePressed(MouseEvent event) {
			Point p = event.getPoint();

			for (int i = 0; i < points.length; i++) {
				if (points[i].contains(p)) {
					pos = i;
					return;
				}
			}
		}

		public void mouseReleased(MouseEvent event) {
			pos = -1;
		}

		public void mouseDragged(MouseEvent event) {
			if (pos == -1)
				return;

			points[pos].setRect(event.getPoint().x, event.getPoint().y,
					points[pos].getWidth(), points[pos].getHeight());
			repaint();
		}
	}

	public static void main(String[] args) {

		JFrame frame = new JFrame("Resize Rectangle");

		frame.add(new ResizeRectangle());
		frame.setSize(300, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
